/*
 * (C) Copyright 2023 orchy
 * This file is licensed under the BSD-3-Clause license.
 * <https://spdx.org/licenses/BSD-3-Clause.html>
 */
#ifndef _COMPLEX_H
#define _COMPLEX_H

// # 7.3.1
#define complex _Complex
#define _Complex_I ((complex)0)

#define I _Complex_I

// # 7.3.5
// ## 7.3.5.1
double complex cacos(double complex z);
float complex cacosf(float complex z);
long double complex cacosl(long double complex z);

// ## 7.3.5.2
double complex casin(double complex z);
float complex casinf(float complex z);
long double complex casinl(long double complex z);

// ## 7.3.5.3
double complex catan(double complex z);
float complex catanf(float complex z);
long double complex catanl(long double complex z);

// ## 7.3.5.4
double complex ccos(double complex z);
float complex ccosf(float complex z);
long double complex ccosl(long double complex z);

// ## 7.3.5.5
double complex csin(double complex z);
float complex csinf(float complex z);
long double complex csinl(long double complex z);

// ## 7.3.5.6
double complex ctan(double complex z);
float complex ctanf(float complex z);
long double complex ctanl(long double complex z);

// # 7.3.6
// ## 7.3.6.1
double complex cacosh(double complex z);
float complex cacoshf(float complex z);
long double complex cacoshl(long double complex z);

// ## 7.3.6.2
double complex casinh(double complex z);
float complex casinhf(float complex z);
long double complex casinhl(long double complex z);

// ## 7.3.6.3
double complex catanh(double complex z);
float complex catanhf(float complex z);
long double complex catanhl(long double complex z);

// ## 7.3.6.4
double complex ccosh(double complex z);
float complex ccoshf(float complex z);
long double complex ccoshl(long double complex z);

// ## 7.3.6.5
double complex csinh(double complex z);
float complex csinhf(float complex z);
long double complex csinhl(long double complex z);

// ## 7.3.6.6
double complex ctanh(double complex z);
float complex ctanhf(float complex z);
long double complex ctanhl(long double complex z);

// # 7.3.7
// ## 7.3.7.1
double complex cexp(double complex z);
float complex cexpf(float complex z);
long double complex cexpl(long double complex z);

// ## 7.3.7.2
double complex clog(double complex z);
float complex clogf(float complex z);
long double complex clogl(long double complex z);

// # 7.3.8
// ## 7.3.8.1
double cabs(double complex z);
float cabsf(float complex z);
long double cabsl(long double complex z);

// ## 7.3.8.2
double complex cpow(double complex x, double complex y);
float complex cpowf(float complex x, float complex y);
long double complex cpowl(long double complex x, long double complex y);

// ## 7.3.8.3
double complex csqrt(double complex z);
float complex csqrtf(float complex z);
long double complex csqrtl(long double complex z);

// # 7.3.9
// ## 7.3.9.1
double carg(double complex z);
float cargf(float complex z);
long double cargl(long double complex z);

// ## 7.3.9.2
double cimag(double complex z);
float cimagf(float complex z);
long double cimagl(long double complex z);

// ## 7.3.9.3
double complex conj(double complex z);
float complex conjf(float complex z);
long double complex conjl(long double complex z);

// ## 7.3.9.4
double complex cproj(double complex z);
float complex cprojf(float complex z);
long double complex cprojl(long double complex z);

// ## 7.3.9.5
double creal(double complex z);
float crealf(float complex z);
long double creall(long double complex z);

#endif
